#pragma once
using std::string;
using pugi::xml_document;
using pugi::xml_parse_result;
using pugi::xml_node;
using std::cin;
using std::cout;
using std::endl;
using std::vector;
using std::list;


typedef list<size_t> offsets_list;


struct FundamentalTypeStruct {
	string id;
	string name;
	size_t size;
	size_t align;

	FundamentalTypeStruct(string id, string name, size_t size, size_t align):\
		id(id), name(name), size(size), align(align){}
	
};

struct PointerTypeStruct{
	string id;
	string type;
	size_t size;
	size_t align;
	PointerTypeStruct(string id, string type, size_t size, size_t align):\
	id(id), type(type), size(size), align(align){}
};

struct FunctionStruct{
	string id;
	string name;
	string returns;
	string mangled;
	string demangled;
	string file;
	string line;
};

struct ArgumentStruct{
	string type;
	string location;
	string file;
	string line;
};


struct Field{
	string id;
	string name;
	string type;
	size_t offset;
	string context;
//	string access;
//	string location;
//	string file;
//	string line;

	Field(string id, string name, string type, size_t offset, string context): id(id), name(name), type(type), \
		offset(offset), context(context) {}
	
};


struct StructDesc{
	string name;
	string id;

	StructDesc(string name, string id): name(name), id(id) {}
};



struct ObjStruct{
	list<size_t> offsets; //offsets are calculated in BITS
};



struct ClassStruct{
};
